package com.millstein.tsinglog.controller;

import com.millstein.tsinglog.annotation.ResponseResult;
import com.millstein.tsinglog.annotation.ShiroAccessLog;
import com.millstein.tsinglog.model.dto.carousel.CarouselImageSaveDTO;
import com.millstein.tsinglog.model.dto.carousel.CarouselSaveDTO;
import com.millstein.tsinglog.model.pojo.CarouselImage;
import com.millstein.tsinglog.model.vo.result.PageResult;
import com.millstein.tsinglog.service.CarouselService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/carousel")
@ResponseResult
@CrossOrigin
public class CarouselController {

    @Autowired
    private CarouselService carouselService;

    /**
     * 分页条件查询轮播图图片
     * @param currentPage 当前页
     * @param pageSize 每页数据量
     * @param keyword 关键字
     * @return
     */
    @GetMapping("/getImagesByPage")
    @RequiresPermissions("carousel:query")
    @ShiroAccessLog("查询轮播图信息")
    public PageResult<CarouselImage> getImagesByPage(Integer currentPage,
                                                     Integer pageSize,
                                                     String keyword) {
        return carouselService.getImagesByPage(currentPage, pageSize, keyword);
    }

    /**
     * 设置轮播图图片是否启用
     * @param id 图片的id
     * @param usable 是否启用，1启用，0禁用
     * @return
     */
    @GetMapping("/changeUsable")
    @RequiresPermissions("carousel:update")
    @ShiroAccessLog("修改轮播图启用状态")
    public void changeUsable(Long id, Short usable) {
        carouselService.changeUsable(id, usable);
    }

    /**
     * 保存轮播图配置
     * @param carouselSaveDTO 配置信息
     */
    @PostMapping("/saveConfig")
    @RequiresPermissions("carousel:saveConfig")
    @ShiroAccessLog("保存轮播图配置")
    public void saveConfig(@RequestBody @Valid CarouselSaveDTO carouselSaveDTO) {
        carouselService.saveConfig(carouselSaveDTO);
    }

    /**
     * 根据轮播图的配置名或者配置的值
     * @param key 配置名
     * @return
     */
    @GetMapping("/getConfigByKey")
    @RequiresPermissions("carousel:saveConfig")
    public Object getConfigByKey(String key) {
        return carouselService.getConfigByKey(key);
    }

    /**
     * 新增轮播图数据
     * @param carouselImageSaveDTO 轮播图的数据
     * @return
     */
    @PostMapping("/insertCarouselImage")
    @RequiresPermissions("carousel:insert")
    @ShiroAccessLog("新增轮播图信息")
    public void insertCarouselImage(@RequestBody @Valid CarouselImageSaveDTO carouselImageSaveDTO) {
        carouselService.insertCarouselImage(carouselImageSaveDTO);
    }

    /**
     * 修改轮播图数据
     * @param carouselImageSaveDTO 轮播图的数据
     * @return
     */
    @PostMapping("/updateCarouselImage")
    @RequiresPermissions("carousel:update")
    @ShiroAccessLog("修改轮播图信息")
    public void updateCarouselImage(@RequestBody @Valid CarouselImageSaveDTO carouselImageSaveDTO) {
        carouselService.updateCarouselImage(carouselImageSaveDTO);
    }

    /**
     * 根据id查询轮播图片
     * @param id 轮播图片的id
     * @return
     */
    @GetMapping("/getCarouselImageById")
    @RequiresPermissions("carousel:update")
    public CarouselImage getCarouselImageById(Long id) {
        return carouselService.getCarouselImageById(id);
    }

    /**
     * 批量删除轮播图片
     * @param ids
     * @return
     */
    @GetMapping("/deleteByIds")
    @RequiresPermissions("carousel:delete")
    @ShiroAccessLog("删除轮播图信息")
    public void deleteByIds(@RequestParam("ids") List<Long> ids) {
        carouselService.deleteByIds(ids);
    }

}
